package experiment.e02.code;

import java.util.Scanner;

/**
 * @author thinkpad - 83start
 * @version v1.0
 * @create 2022/9/22 16:05
 * @package experiment.e02.code
 * @description 文输入年月日，输出这一天的前一天。
 */

public class E09 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 用户输入年月日
        System.out.println("请输入年月日（2019-3-1）");
        String date = scanner.nextLine();
        String[] split = date.split("-");
        int year = Integer.parseInt(split[0]);
        int month = Integer.parseInt(split[1]);
        int day = Integer.parseInt(split[2]);

        // 检查日期是否输入正确
        if (year >= 0 && month > 0 && month <= 12 && day > 0 && day <= getMonthDays(year, month)) {
            // 当是一个月的第一天，且不是一月
            if (month != 1 && day == 1) {
                month = month - 1;
                day = getMonthDays(year, month);
                // 当是一年中的第一天
            } else if (month == 1 && day == 1) {
                year -= 1;
                month = 12;
                day = getMonthDays(year,month);
            } else { // 其他情况 天数 -1 即可
                day -= 1;
            }
            // 输出日期
            System.out.println(String.format("前一天的天数为：%d 年 %d月 %d日", year, month, day));
        } else { // 输入错误，抛异常
            throw new IllegalArgumentException("日期输入有误");
        }
    }

    /**
     * 根据年份和月份获取对应的天数
     *
     * @param year  年份
     * @param month 月份
     * @return 天数
     */
    static int getMonthDays(int year, int month) {
        int[] mdays = {0, 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

        // 判断是否是 2 月
        if (month == 2){

            if ((year % 400) == 0 || ((year % 4) == 0) && ((year % 100) != 0)) { // 如果是闰年
                return 28;
            }else { // 如果不是闰年
                return 29;
            }
        }else {
            return mdays[month];
        }
    }

}
